package com.ufcg.lvc.client.prototipacao;

import java.util.List;

import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.AbsolutePanel;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.CheckBox;
import com.google.gwt.user.client.ui.FileUpload;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.ListBox;
import com.google.gwt.user.client.ui.RadioButton;
import com.google.gwt.user.client.ui.TextArea;
import com.google.gwt.user.client.ui.TextBox;
import com.smartgwt.client.widgets.Slider;
import com.smartgwt.client.widgets.Window;
import com.ufcg.lvc.client.GreetingService;
import com.ufcg.lvc.client.GreetingServiceAsync;

public class NovaQuestao {

	AbsolutePanel painelNovaQuestao;
	String msgSaida;
	String tipo = "objetiva";
	List<String> listaTitulos;

	public static GreetingServiceAsync getServico() {
		return GWT.create(GreetingService.class);
	}

	public NovaQuestao() {

		final AsyncCallback<Boolean> callback = new AsyncCallback<Boolean>() {

			@Override
			public void onFailure(Throwable caught) {
				msgSaida = "Erro na comunicação com o servidor";
			}

			@Override
			public void onSuccess(Boolean result) {
				msgSaida = "A questão foi salva corretamente";

			}
		};
		
		final AsyncCallback<List<String>> callbackList = new AsyncCallback<List<String>>() {

			@Override
			public void onSuccess(List<String> result) {
				listaTitulos = result;
			}

			@Override
			public void onFailure(Throwable caught) {
				System.out.println("Erro ao carregar questoes");
			}
		};
		getServico().getLista("questao", "titulo", callbackList);

		painelNovaQuestao = new AbsolutePanel();
		painelNovaQuestao.setSize("900px", "707px");
		// painelInicial.setSize("963px", "713px");

		Label lblTitulo = new Label("Nova questão");
		lblTitulo.setStyleName("gwt-TituloMedio");
		painelNovaQuestao.add(lblTitulo, 0, 10);

		Label lblTituloQuestao = new Label("Título:");
		painelNovaQuestao.add(lblTituloQuestao, 60, 69);
		lblTituloQuestao.setSize("43px", "17px");

		Label lblAssuntoAbordado = new Label("Assunto abordado:");
		painelNovaQuestao.add(lblAssuntoAbordado, 60, 109);
		lblAssuntoAbordado.setSize("165px", "17px");

		Label lblEnunciado = new Label("Enunciado:");
		lblEnunciado.setDirectionEstimator(true);
		painelNovaQuestao.add(lblEnunciado, 60, 162);
		lblEnunciado.setSize("75px", "17px");

		Label lblDificuldade = new Label("Dificuldade:");
		painelNovaQuestao.add(lblDificuldade, 60, 344);
		lblDificuldade.setSize("80px", "17px");

		Label lblImagem = new Label("Imagem:");
		painelNovaQuestao.add(lblImagem, 60, 410);
		lblImagem.setSize("61px", "17px");

		final TextBox tituloTB = new TextBox();
		painelNovaQuestao.add(tituloTB, 235, 69);
		tituloTB.setSize("422px", "14px");

		final TextBox assuntoTB = new TextBox();
		painelNovaQuestao.add(assuntoTB, 235, 109);
		assuntoTB.setSize("422px", "14px");

		final TextArea enunciadoTA = new TextArea();
		enunciadoTA.setSize("593px", "153px");
		painelNovaQuestao.add(enunciadoTA, 235, 162);

		final Slider dificuldadeSlider = new Slider();
		dificuldadeSlider.setSize("188px", "17px");
		dificuldadeSlider.setShowValue(false);
		dificuldadeSlider.setShowTitle(false);
		dificuldadeSlider.setTitle("");
		dificuldadeSlider.setMinValueLabel("Fácil");
		dificuldadeSlider.setMaxValueLabel("Difícil");
		dificuldadeSlider.setVertical(false);
		painelNovaQuestao.add(dificuldadeSlider, 235, 344);

		final FileUpload imagemFU = new FileUpload();
		painelNovaQuestao.add(imagemFU, 229, 405);
		imagemFU.setSize("295px", "26px");

		Label lblTipoDeQuestao = new Label("Tipo de questão:");
		painelNovaQuestao.add(lblTipoDeQuestao, 60, 461);
		lblTipoDeQuestao.setSize("129px", "17px");

		Label lbl = new Label("");
		painelNovaQuestao.add(lbl);

		RadioButton objetivaRB = new RadioButton("new name", "Objetiva");
		painelNovaQuestao.add(objetivaRB, 235, 461);
		objetivaRB.setValue(true);
		objetivaRB.setSize("77px", "17px");

		RadioButton subjetivaRB = new RadioButton("new name", "Subjetiva");
		painelNovaQuestao.add(subjetivaRB, 235, 482);
		subjetivaRB.setSize("83px", "17px");

		Label lblAlternativas = new Label("Alternativas:");
		painelNovaQuestao.add(lblAlternativas, 60, 519);
		lblAlternativas.setSize("90px", "17px");

		final ListBox alternativasLB = new ListBox();
		painelNovaQuestao.add(alternativasLB, 230, 519);
		alternativasLB.setSize("608px", "82px");
		alternativasLB.setVisibleItemCount(5);

		final Button btnRemover = new Button("Remover");
		painelNovaQuestao.add(btnRemover, 757, 607);
		btnRemover.setSize("81px", "30px");

		final Button btnEditar = new Button("Editar");
		painelNovaQuestao.add(btnEditar, 670, 607);
		btnEditar.setSize("81px", "30px");

		final Button btnCriar = new Button("Criar");
		painelNovaQuestao.add(btnCriar, 583, 607);
		btnCriar.setSize("81px", "30px");

		final Button btnSalvar = new Button("Criar");
		btnSalvar.addClickHandler(new ClickHandler() {
			public void onClick(ClickEvent event) {
				getServico().salvarQuestao(tituloTB.getText(),
						assuntoTB.getText(), enunciadoTA.getText(),
						String.valueOf(dificuldadeSlider.getValue()), tipo,
						imagemFU.getFilename(), callback);
				painelNovaQuestao.clear();
				final MinhasQuestoes n = new MinhasQuestoes();
//				final MinhasQuestoes n = new MinhasQuestoes(listaTitulos);
				painelNovaQuestao.add(n.getPanel());

			}
		});
		btnSalvar.setText("Salvar");
		painelNovaQuestao.add(btnSalvar, 370, 667);
		btnSalvar.setSize("81px", "30px");

		final Button btnCancelar = new Button("Editar");
		btnCancelar.addClickHandler(new ClickHandler() {
			public void onClick(ClickEvent event) {
			}
		});
		btnCancelar.setText("Cancelar");
		painelNovaQuestao.add(btnCancelar, 457, 667);
		btnCancelar.setSize("81px", "30px");

		subjetivaRB.addClickHandler(new ClickHandler() {
			public void onClick(ClickEvent event) {
				alternativasLB.setEnabled(false);
				btnCriar.setEnabled(false);
				btnEditar.setEnabled(false);
				btnRemover.setEnabled(false);
				alternativasLB.setFocus(false);
				tipo = "subjetiva";
				// painelNovaQuestao.remove(btnSalvar);
				// painelNovaQuestao.remove(btnCancelar);
				// painelNovaQuestao.add(btnSalvar, 432, 587);
				// painelNovaQuestao.add(btnCancelar, 519, 587);
			}
		});

		objetivaRB.addClickHandler(new ClickHandler() {
			public void onClick(ClickEvent event) {
				alternativasLB.setEnabled(true);
				btnCriar.setEnabled(true);
				btnEditar.setEnabled(true);
				btnRemover.setEnabled(true);
				alternativasLB.setFocus(true);
				tipo = "objetiva";
				// painelNovaQuestao.remove(btnSalvar);
				// painelNovaQuestao.remove(btnCancelar);
				// painelNovaQuestao.add(btnSalvar, 432, 673);
				// painelNovaQuestao.add(btnCancelar, 519, 673);
			}
		});

		btnCriar.addClickHandler(new ClickHandler() {
			public void onClick(ClickEvent event) {

				final Window winModal = new Window();
				winModal.setWidth(360);
				winModal.setHeight(115);
				winModal.setTitle("Modal Window");
				winModal.setShowMinimizeButton(false);
				winModal.setIsModal(true);
				winModal.setShowModalMask(true);
				winModal.centerInPage();

				// final PopupPanel popup = new PopupPanel();
				// popup.setStyleName("demo-PopUpPanel");
				// popup.setTitle("Nova alternativa");

				AbsolutePanel absolutePanel_10 = new AbsolutePanel();
				absolutePanel_10.setSize("963px", "155px");

				Label lblEnunciadoDaAlternativa = new Label(
						"Enunciado da alternativa:");
				absolutePanel_10.add(lblEnunciadoDaAlternativa, 0, 0);

				final TextArea enunciadoAlternativa = new TextArea();
				enunciadoAlternativa.setSize("766px", "110px");
				absolutePanel_10.add(enunciadoAlternativa, 189, 0);

				Label label = new Label("Imagem:");
				absolutePanel_10.add(label, 189, 126);
				label.setSize("64px", "17px");

				FileUpload imagemAlternativa = new FileUpload();
				absolutePanel_10.add(imagemAlternativa, 259, 122);
				imagemAlternativa.setSize("295px", "26px");

				CheckBox chckbxAlternativaCorreta = new CheckBox(
						"Alternativa correta");
				chckbxAlternativaCorreta.setChecked(true);
				absolutePanel_10.add(chckbxAlternativaCorreta, 0, 127);

				Button cancelarAlternativaBT = new Button("Excluir");
				cancelarAlternativaBT.setText("Cancelar");
				absolutePanel_10.add(cancelarAlternativaBT, 858, 122);
				cancelarAlternativaBT.setSize("97px", "29px");

				Button salvarAlternativaBT = new Button("Excluir");
				salvarAlternativaBT.setText("Salvar");
				absolutePanel_10.add(salvarAlternativaBT, 755, 122);
				salvarAlternativaBT.setSize("97px", "29px");

				// popup.add(absolutePanel_10);

				// popup.show();
				// enunciadoAlternativa.setText("");
				// popup.center();

				cancelarAlternativaBT.addClickHandler(new ClickHandler() {
					@Override
					public void onClick(ClickEvent event) {
						// popup.hide();
						winModal.destroy();
					}
				});

				salvarAlternativaBT.addClickHandler(new ClickHandler() {
					public void onClick(ClickEvent event) {
						alternativasLB.addItem(enunciadoAlternativa.getText());
						// ////////////////////////////////////////////////////////
						// adicionar no banco de dados tamb�m
						// popup.hide();
						winModal.destroy();
					}
				});

				winModal.addItem(absolutePanel_10);
				winModal.show();

			}
		});

		btnRemover.addClickHandler(new ClickHandler() {
			public void onClick(ClickEvent event) {
				alternativasLB.removeItem(alternativasLB.getSelectedIndex());
			}
		});

	}

	public AbsolutePanel getPanel() {
		return painelNovaQuestao;
	}
}
